#include <stdio.h>

/**
 * const: 定义常量，读不可写，可以用来修饰变量、指针、数组、形参
 */

int main()
{
    //定义一个常量
    const int i = 10;
    //无法直接修改常量的值
    //i = 20;

    //使用指针修改常量的值
    int* p = &i;
    *p = 20;
    printf("i = %d\n", i);

    //使用const修饰数组，数组中的每一个元素都是常量，数组的地址值也是常量
    const int arr[] = { 1, 2, 3, 4 };
    //下面两行代码放开注释会报错，原因:不管是数组的地址值还是数组首元素的地址值，都是常量，对常量赋值是不合法的，但是只+1不赋值是合法行为
    //arr[0] += 1;
    //arr = arr + 1;

    //下面两行代码放开注释不会报错，因为只+1不赋值是合法的
    arr[0] + 1;
    arr + 1;

    int* p1 = &arr;
    p1 = p1 + 1;
    int* p2 = &arr[0];
    p2 = p2 + 1;
    return 0;
}
